package com.nurt.service.impl;

import com.nurt.dao.DishDao;
import com.nurt.dao.OrderDao;
import com.nurt.dao.OrderDishDao;
import com.nurt.dao.impl.DishDaoImpl;
import com.nurt.dao.impl.OrderDaoImpl;
import com.nurt.dao.impl.OrderDishDaoImpl;
import com.nurt.entity.DishEntity;
import com.nurt.entity.OrderDishEntity;
import com.nurt.entity.OrderEntity;
import com.nurt.service.OrderService;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

// 步骤5.1：创建订单服务接口的实现类。
public class OrderServiceImpl implements OrderService {
    // 步骤5.2：创建订单服务接口的实现类的属性。
    private OrderDao orderDao;
    private DishDao dishDao;
    private OrderDishDao orderDishDao;

    // 步骤5.3：创建订单服务接口的实现类的构造函数。
    public OrderServiceImpl() {
        this.orderDao = new OrderDaoImpl();
        this.dishDao = new DishDaoImpl();
        this.orderDishDao = new OrderDishDaoImpl();
    }

    // 步骤5.4：实现订单服务接口的方法。
    public List<OrderEntity> getOrders(int userId) {
        List<OrderEntity> orders = new ArrayList<>();
        try {
            orders = orderDao.selectOrders(userId);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return orders;
    }

    // 步骤5.5：实现订单服务接口的方法。
    public OrderEntity getOrderByStatus(int userId, int status) {
        OrderEntity order = null;
        try {
            order = orderDao.selectOrderByStatus(userId, status);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return order;
    }

    // 步骤5.6：实现订单服务接口的方法。
    public void createOrder(OrderEntity order) {
        try {
            orderDao.insertOrder(order);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    // 步骤5.7：实现订单服务接口的方法。
    public void updateOrderStatus(int orderId, int status) {
        try {
            orderDao.updateOrderStatus(orderId, status);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    // 步骤5.8：实现订单服务接口的方法。
    public int addToCart(int orderId, int dishId) {
        try {
            OrderDishEntity orderDish = new OrderDishEntity();
            orderDish.setOrderId(orderId);
            orderDish.setDishId(dishId);

            DishEntity dish = dishDao.selectDish(dishId);
            orderDish.setName(dish.getName());
            orderDish.setQuantity(1);
            orderDish.setPrice(dish.getPrice());

            int orderDishId = orderDishDao.insertOrderDish(orderDish);
            return orderDishId;
        } catch (SQLException e) {
            e.printStackTrace();
            return -1;
        }
    }

    // 步骤5.9：实现订单服务接口的方法。
    public void removeFromCart(int orderId, int dishId) {
        orderDishDao.deleteOrderDish(orderId, dishId);
    }

    // 步骤5.10：实现订单服务接口的方法。
    public List<OrderDishEntity> getCartContents(int orderId) {
        try {
            return orderDishDao.selectOrderDishes(orderId);
        } catch (SQLException e) {
            e.printStackTrace();
            return new ArrayList<>();
        }
    }

    // 步骤5.11：实现订单服务接口的方法。
    public void clearCart(int orderId) {
        orderDishDao.deleteAllOrderDishes(orderId);
    }

    public void placeOrder(OrderEntity order) {
        try {
            orderDao.insertOrder(order);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }


    // 更新订单
    @Override
    public void updateOrderDish(OrderDishEntity orderDish) {
        try {
            orderDishDao.updateOrderDish(orderDish);
        }catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
